#!/bin/env ruby

require "./Inventaire.rb"

##
#=Classe Heros
#La classe Heros gère le personnage jouable, ses caractéristiques, sa position sur la carte et les objets qu'il possède
#
#=Attributs :
#[@nom] Nom du Heros
#[@orPossede] Accumule l'énergie temporaire du Heros, gagnées par le biais de potions, afin de supprimer les effets de potions à l'amnésie
#[@energie] Accumule la force temporaire du Heros, gagnée par le biais de potions, afin de supprimer les effets de potions à l'amnésie
#[@forceDeBase] Accumule la défense temporaire du Heros, gagnée par le biais de potions, afin de supprimer les effets de potions à l'amnésie
#[@defenseDeBase] Liste de nourriture présente dans le jeu à un instant.
#[@caseCourante] Liste des équipements présents dans le jeu à un instant.
#[@inventaire] Inventaire du personnage
#
class Heros

	@nom
	@orPossede
	@energie
	@forceDeBase
	@defenseDeBase
	@caseCourante
	@inventaire
	
  # Initialisation des caractéristiques du Heros
	def initialize(nom, orPossede, energie, force, defense, caseCourante)
		@nom		= nom 
		@orPossede	= orPossede
		@energie	= energie
		@forceDeBase	= force
		@defenseDeBase	= defense
		
		@caseCourante	= caseCourante
		@caseCourante.setHeros(self)
		
		# Initialisation de l'Inventaire
		@inventaire	= Inventaire.nouveau()
	end

	# Revoie le nom du Heros
	def getNom
		return @nom
	end
	
  # Renvoie la quantité d'or du Heros
	def getOrPossede
		return @orPossede
	end
	
  # Renvoie la valeur d'energie courante du Heros
	def getEnergie
		return @energie
	end
	
  # Renvoie la valeur de force du Heros
	def getForce
		return @forceDeBase
	end
	
  # Renvoie la valeur de défense du Heros
	def getDefense
		return @defenseDeBase
	end
	
  # Renvoie la Case courante du Heros
	def getCase
		return @caseCourante
	end
	
  # Renvoie l'Inventaire du Heros
	def getInventaire
		return @inventaire
	end

  # Place le Heros sur la Case passée en paramètre
	def setCase(nouvelleCase)
		@caseCourante = nouvelleCase
	end
	
  # Assigne au Heros l'Inventaire passé en paramètre
	def setInventaire(nouvelInventaire)
		@inventaire = nouvelInventaire
	end
	
  # Ajoute la valeur passée en paramètre à la quantité d'or du Heros 
	def augmenterOrPossede(gain)
		@orPossede += gain
	end
	
  # Ajoute la valeur passée en paramètre à la valeur d'energie du Heros
	def augmenterEnergie(gain)
		@energie += gain
	end
	
  # Ajoute la valeur passée en paramètre à la valeur de force du Heros
	def augmenterForce(gain)
		@forceDeBase += gain
	end
	
  # Ajoute la valeur passée en paramètre à la valeur de défense du Heros
	def augmenterDefense(gain)
		@defenseDeBase += gain
	end
	
  # Retire la valeur passée en paramètre à la quantité d'or du Heros
	def diminuerOrPossede(gain)
		if(gain >= getOrPossede())
			@orPossede = 0	
		else
			@orPossede -= gain
		end
	end
	
  # Retire la valeur passée en paramètre à la valeur d'énergie du Heros
	def diminuerEnergie(gain)
		if(gain >= getEnergie())
			@energie = 0	
		else
			@energie -= gain
		end
	end
	
  # Retire la valeur passée en paramètre à la valeur de force du Heros
	def diminuerForce(gain)
		if(gain >= getForce())
			@forceDeBase = 0	
		else
			@forceDeBase -= gain
		end
	end
	
  # Retire la valeur passée en paramètre à la valeur de défense du Heros
	def diminuerDefense(gain)
		if(gain >= getDefense())
			@defenseDeBase = 0	
		else
			@defenseDeBase -= gain
		end
	end
	
  # Frappe l'Ennemi passé en paramètre
	def taperSur(ennemi)
		degat = getForce() - ennemi.getDefense()
		
		if(degat>0)
			ennemi.diminuerEnergie(degat)
		end
		
		return degat
	end
	
  # Renvoie vrai si le Heros est vivant, faux sinon
	def estVivant()
		return (@energie > 0)
	end
end
